//=============================================================================

#include "../../../../inc/aClient.h"
#include "../../../../inc/aPacketIni.h"
#include "../../../../inc/doWorld.h"

//=============================================================================

aClient::aClient()
{
  memset(&target, 0, sizeof(target));
  target.sin_family = AF_INET;
  target.sin_port = htons(port);
}

//=============================================================================

actRet aClient::acConnectTo(const aString& ip)
{
  if (ip.asGetLength() <= 0)
    return CLN_BADIP;

  target.sin_addr.S_un.S_addr = inet_addr(ip.asGetStringChar());

  if (connect(sock, (struct sockaddr*)&target, sizeof(sockaddr)) == SOCKET_ERROR)
    return CLN_CANTCONNECT;

  anReceive(sock);

  return CLN_DONE;
}

//=============================================================================

antRet aClient::anAnalyzePacket(SOCKET s, const aPacket& p)
{
  switch(p.apGetType())
  {
    case PAK_NULL:
    {
      break;
    }

    case PAK_INI:
    {
      anSend(sock, aPacketIni(AUX.aaGetVersion(), 0, 1));

      break;
    }
    case PAK_CLS_CON:
    {
      anDisconnect();

      break;
    }
    case PAK_ADD_MAGE:
    {
      WORLD.awAddPacketToProceed(p);

      //WORLD.awAddMage(mage.mageType, aVector(mage.pos[0], mage.pos[1], mage.pos[2]));

      break;
    }

    default:
    {
      return NET_UNKNOWNPACKET;
    }
  }

  return NET_DONE;
}

//=============================================================================

aClient::~aClient()
{
}

//=============================================================================
